package zf.data.math
{
	/**
	 * 
	 * @author 张峰
	 * @QQ:37520626
	 * @Email:7677@163.com
	 * @Date:2012-12-17 下午5:37:01
	 * 
	 */
	public class Random
	{
		/**
		 * 获得随机整数 
		 * @param max 最大数字
		 * @return 
		 * 
		 */
		public static function randomUint(max:uint=100):uint
		{
			return Math.floor(Math.random()*max*9)%max;
		}
		
		/**
		 * 将数组随机排列 
		 * @param arr
		 * @return 
		 * 
		 */
		public static function randomArray(arr:Array):Array
		{
			var newArr:Array=[];
			var reArr:Array=[];
			var total:uint=arr.length;
			var index:uint;
			for(var i:uint=0;i<total;i++)
			{
				newArr[i]=i;
			}
			
			for(i=0;i<total;i++)
			{
				index=randomUint(newArr.length);				
				reArr[i]=arr[newArr[index]];
				newArr.splice(index,1);
			}
			return reArr;
		}
		/**
		 * 获得随机颜色 
		 * @return 
		 * 
		 */
		public static function getColor():uint
		{
			return uint(Math.random()*0xffffff);
		}
		
		/**
		 * 获得随机高亮颜色 
		 * @return 
		 * 
		 */
		public static function getLightColor():uint
		{
			return uint(Math.random()*128+127)<<16|uint(Math.random()*128+127)<<8|uint(Math.random()*128+127);
		}
		
		/**
		 * 获得随机暗色颜色 
		 * @return 
		 * 
		 */
		public static function getDarkColor():uint
		{
			return uint(Math.random()*128)<<16|uint(Math.random()*128)<<8|uint(Math.random()*128)
		}
		/**
		 * 获得随机温色区颜色 
		 * @return 
		 * 
		 */
		public static function getMildColor():uint
		{
			return uint(Math.random()*128+64)<<16|uint(Math.random()*128+64)<<8|uint(Math.random()*128+64)
		}
		/**
		 * 获得随机红色区颜色 
		 * @return 
		 * 
		 */
		public static function getRedColor():uint
		{
			return uint((Math.random()*256)<<16|0<<8|0)
		}
		
		/**
		 * 获得正负1 
		 * @return 
		 * 
		 */
		public static function getOne():int
		{
			return Math.random()>0.5?1:-1;
		}
		
		/**
		 * 获得0或1 
		 * @return 
		 * 
		 */
		public static function getBinary():uint
		{
			return Math.random()>0.5?1:0;
		}
		
		/**
		 * 获得max(包括)以内的随机数 
		 * @param max 
		 * @return 
		 * 
		 */
		public static function getRandom(max:uint=100):uint
		{
			return Math.round(Math.random()*max)%max;
		}
		
		/**
		 * 获得范围内的随机数 
		 * @param min
		 * @param max
		 * @return 
		 * 
		 */
		public static function getBoundary(min:int=0,max:int=100):int
		{
			var start:int=Math.min(min,max);
			var end:int=Math.max(min,max);
			
			var total:int=end-start;
			return start+getRandom(total);
		}
	}
}